C语言中的循环之高级循环 (下)-学习笔记-12

更加灵活的利用循环

我们刚才讲了,如何使用 C 语言中的两种循环语句,For循环do...while循环,那么这些循环能否像if...else...语句一样能够彼此嵌套呢?答案是肯定到,循环也可以进行嵌套,并且通过嵌套,我们可以更加灵活的使用循环的各种特点。当然了,我们甚至也可以改变循环的执行状态,让循环在我们需要的时候跳出。

几种循环的比较

首先我们先看看几种循环的比较,找到这些循环的特点。
1、三种循环的运行机制都差不多,计次、执行循环体、增量变量,所以可以相互替换使用。
2、while 循环do...while循环都是在 while 后面的括号中增加判断条件,来判断是否执行下一轮循环,所以在循环体中,要对这个判断条件施加一些设定,让循环能够及时的退出。
3、凡是用 while 循环写的,都可以用 for 循环实现。
4、while 循环do...while循环for 循环都可以使用 break 语句跳出循环,使用 continue 语句结束本次循环。(这两个语句详见下方)

循环的嵌套

在一个循环体内包含另一个完整的循环体,这就是循环的嵌套了。

循环嵌套举例

while 循环do...while循环以及for 循环三者彼此之间都可以进行嵌套

while 里可以是:while、do…while、for;
do…while 里可以是:while、do…while、for;
for 里可以是:while、do…while、for;

所以我们所有学过的循环都可以进行嵌套。我们利用嵌套的方式,编写一个九九乘法表

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main(){
for (int i=1;i<=9;i++){
for(int k=1;k<=i;k++){
printf("%d X %d = %d\t",i,k,i*k);
}
printf("\n");
}
return 0;
}

我们看到,利用嵌套可以更加灵活的使用循环,但是如何能够在我们需要的时候跳出循环呢?

break 语句提前终止循环

break 语句是控制循环执行状态的终止语句,break 语句可以用来从循环体内跳出循环体,即提前结束当前循环,执行下面的语句。

举例说明

问题

每个人往盒子里放米粒,第一个人放1粒米,第二个人放2粒米…以此类推,一共100个人,直到盒子里有200粒米的时候,就停止放米,这样一共需要多少人?

思路

我们利用循环和 break 跳出,循环次数是100,跳出条件是盒子里的米粒等于200。

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main(){
int rice=0,people;
for(people=1;people<=100;people++){
rice=rice+people;
printf("%d个人,%d 粒米\n",people,rice);
if(rice>=200){
break;
}
}
printf("200粒米需要%d个人\n",people);
return 0;
}

运行结果是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1个人,1 粒米
2个人,3 粒米
3个人,6 粒米
4个人,10 粒米
5个人,15 粒米
6个人,21 粒米
7个人,28 粒米
8个人,36 粒米
9个人,45 粒米
10个人,55 粒米
11个人,66 粒米
12个人,78 粒米
13个人,91 粒米
14个人,105 粒米
15个人,120 粒米
16个人,136 粒米
17个人,153 粒米
18个人,171 粒米
19个人,190 粒米
20个人,210 粒米
200粒米需要20个人
Program ended with exit code: 0

使用

本来for 循环要执行100次的,但是我们在循环体中增加了判断循环跳出的条件,如果条件满足,则马上跳出,不管循环了多少次,如果条件不满足,那么循环100次后也会跳出,所以,利用循环体内的 break,我们可以更灵活的使用循环。

注意
break 语句,只能在 switch 语句和循环语句中使用,不能单独使用。

continue 语句提前结束本次循环

注意,我们不是要跳出循环,而是结束本次循环,结束后接着进行下一次循环。

举例说明

问题

找出1~100之间,能被2和3整除的数,并且输出。

思路

我们需要遍历1~100,然后对每个数进行判断,如何复合要求,那么我们就执行输出,如果不符合要求,就跳过该次循环。

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main(){
for(int i=1;i<=100;i++){
if(i%2==0 && i%3==0){
printf("%d\n",i);
}else{
continue;
}
}
return 0;
}

解释

首先利用 for 循环遍历了1~100的所有数,在循环体中,增加if 判断,如果满足条件的,则输出,不满足的则跳过该循环。

break 和 continue 的区别

最大的区别就是 break 是跳出循环体,而 continue 是跳出循环体内的这次循环。

嵌套循环的 break?

如果是嵌套循环,在内循环里面增加了 break,那么执行 break 后,程序会结束内循环还是内外循环都结束呢?

举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(){
int n=1;
for (int i=1;i<=4;i++){
for (int k=1;k<=5;k++,n++){
printf("%d\t",n);
if(n%5==0){
n++;
break;
}
}
printf("\n");
if(n>=20){
break;
}
}
return 0;
}

从上面的例子不难看出,每次需要换行的时候,都执行了 break,这样循环跳出到了外面的大循环,执行了外面的\n然后继续进入下一次循环。
所以,break 和 continue都是仅在当前的循环体内有效

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!